package com.order.manager.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.order.manager.Model.UserInfo;
import com.order.manager.Model.other.LoginRequest;
import com.order.manager.Model.other.RestBean;
import com.order.manager.service.UserInfoService;
import com.order.manager.mapper.UserInfoMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author 24862
 * @description 针对表【user_info】的数据库操作Service实现
 * @createDate 2024-03-26 18:27:20
 */
@Service
public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo>
        implements UserInfoService, IService<UserInfo> {

    /**
     * 用户信息数据访问对象
     */
    @Resource
    UserInfoMapper userInfoMapper;

    /**
     * 获取在校学生及学生配送员的有效账户数量
     *
     * @return 符合条件的用户总数
     *
     * @implNote 实现逻辑：
     * 1. 查询角色为"student"且状态为1的有效用户
     * 2. 查询角色为"student_sender"且状态为1的有效用户
     * 3. 合并两个结果集并返回总数量
     *
     * @apiNote 状态码说明：
     * state=1 表示"账户激活且有效"
     * 角色说明：
     * "student" 为普通学生角色
     * "student_sender" 为学生配送员角色
     */
    @Override
    public Integer getStudentCount() {
        // 查询普通学生角色的有效用户列表（state=1）
        List<UserInfo> userInfos = userInfoMapper.selectList(new QueryWrapper<UserInfo>()
                //对应 SQL：WHERE role= student
                .eq("role", "student")
                //对应 SQL：WHERE state= 1
                .eq("state", 1)
        );

        // 追加学生配送员角色的有效用户列表（state=1）
        userInfos.addAll(userInfoMapper.selectList(new QueryWrapper<UserInfo>()
                //对应 SQL：WHERE role= student_sender
                .eq("role", "student_sender")
                //对应 SQL：WHERE state= 1
                .eq("state", 1)
        ));

        // 返回总数量
        return userInfos.size();
    }
}